﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data.SqlClient;

namespace AccesoBD
{
    public class Practicas
    {
        public bool registrarPractica(string nombre, string descripcion, float precioLista, float precioMedico, int idEspecialidad)
        {
            int res = -20;
            SqlConnection conexion = DB.Conectar();
            try
            {
                SqlCommand sqlcmd = new SqlCommand("INSERT INTO Practica(nombre, descripcion, precioLista, precioMedico, idEspecialidad) VALUES (@nombre,@descripcion,@precioLista,@precioMedico,@idEspecialidad)", conexion);
                sqlcmd.Parameters.Add(new SqlParameter("@nombre", nombre));
                sqlcmd.Parameters.Add(new SqlParameter("@descripcion", descripcion));
                sqlcmd.Parameters.Add(new SqlParameter("@precioLista", precioLista));
                sqlcmd.Parameters.Add(new SqlParameter("@precioMedico", precioMedico));
                sqlcmd.Parameters.Add(new SqlParameter("@idEspecialidad", idEspecialidad));

                res = sqlcmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            { throw ex; }
            finally
            {
                conexion.Close();
            }
            if (res > 0)
                return true;
            else
                return false;


        }

        public List<Especialidad> obtenerEspecialidad()
        {
            SqlConnection conexion = DB.Conectar();
            List<Especialidad> lista = null;
            try
            {
                SqlCommand sqlcmd = new SqlCommand("SELECT codEspecialidad, nombre FROM Especialidad", conexion);
                SqlDataReader dr = sqlcmd.ExecuteReader();

                lista = new List<Especialidad>();
                while (dr.Read())
                {
                    Especialidad e = new Especialidad();
                    e.CodEspecialidad = Convert.ToInt32(dr["codEspecialidad"].ToString());
                    e.Nombre = dr["nombre"].ToString();
                    lista.Add(e);

                    e = null;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            finally
            {
                conexion.Close();
            }
            return lista;
        }

        public int obtenerIdEspecialidad(string nombre)
        {
            int id = 0;
            SqlConnection conexion = DB.Conectar();
            SqlCommand sqlcmd = new SqlCommand("SELECT codEspecialidad FROM Especialidad WHERE nombre = @nombre", conexion);
            sqlcmd.Parameters.Add(new SqlParameter("@nombre", nombre));
            id = sqlcmd.ExecuteNonQuery();
            return id;
        }

        public List<Practica> obtenerPractica()
        {
            SqlConnection conexion = DB.Conectar();

            List<Practica> lista = null;

            try
            {
                SqlCommand sqlcmd = new SqlCommand("SELECT idPractica, nombre, descripcion, precioLista, precioMedico, idEspecialidad FROM Practica", conexion);
                SqlDataReader dr = sqlcmd.ExecuteReader();

                lista = new List<Practica>();

                while (dr.Read())
                {
                    Practica prac = new Practica();
                    prac.codigo = Convert.ToInt32(dr["idPractica"].ToString());
                    prac.nombre = dr["nombre"].ToString();
                    if (dr["descripcion"] == DBNull.Value)
                        prac.descripcion = null;
                    else
                        prac.descripcion = dr["descripcion"].ToString();
                    prac.precioLista = (float)Convert.ToDouble(dr["precioLista"].ToString());
                    prac.precioMedico = (float)Convert.ToDouble(dr["precioMedico"].ToString());
                    if (dr["idEspecialidad"] == DBNull.Value)
                        prac.idEspecialidad = null;
                    else
                        prac.idEspecialidad = (int)Convert.ToInt32(dr["idEspecialidad"].ToString());


                    lista.Add(prac);

                    prac = null;
                }

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return lista;

        }

        public void modificarPractica(int idPractica, string nombre, string descripcion, float precioLista, DateTime? fechaBaja)
        {

            SqlConnection conexion = DB.Conectar();
            try
            {
                SqlCommand sqlcmd = new SqlCommand("UPDATE Practica SET nombre = @nombre, descripcion = @descripcion, precioLista = @precio , fechaBaja = @fechaBaja WHERE (idPractica = @idPractica)", conexion);
                sqlcmd.Parameters.Add(new SqlParameter("@idPractica", idPractica));
                sqlcmd.Parameters.Add(new SqlParameter("@nombre", nombre));
                sqlcmd.Parameters.Add(new SqlParameter("@descripcion", descripcion));
                sqlcmd.Parameters.Add(new SqlParameter("@precio", precioLista));
                sqlcmd.Parameters.Add(new SqlParameter("@fechaBaja", fechaBaja));

                sqlcmd.ExecuteNonQuery();

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }

        }

        public List<Practica> obtenerPracticaSegunBusqueda(int id, string nombre)
        {
            SqlConnection conexion = DB.Conectar();

            List<Practica> lista = null;

            try
            {
                SqlCommand sqlcmd = new SqlCommand("SELECT  Practica.idPractica, Practica.nombre, Practica.descripcion, Practica.precioLista, Practica.precioMedico, Practica.baja, Especialidad.nombre FROM Practica INNER JOIN Especialidad ON Practica.idEspecialidad = Especialidad.codEspecialidad WHERE  Practica.idEspecialidad =@id OR Practica.nombre = @nombre", conexion);
                sqlcmd.Parameters.Add(new SqlParameter("@id", id));
                sqlcmd.Parameters.Add(new SqlParameter("@nombre", nombre));
                SqlDataReader dr = sqlcmd.ExecuteReader();

                lista = new List<Practica>();

                while (dr.Read())
                {
                    Practica prac = new Practica();
                    prac.codigo = Convert.ToInt32(dr["idPractica"].ToString());
                    prac.nombre = dr["nombre"].ToString();
                    prac.descripcion = dr["descripcion"].ToString();
                    prac.precioLista = (float)Convert.ToDouble(dr["precioLista"].ToString());
                    prac.precioMedico = (float)Convert.ToDouble(dr["precioMedico"].ToString());




                    lista.Add(prac);

                    prac = null;
                }

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return lista;

        }

        public static float ObtenerPrecioListaPractica(int idPractica)
        {
            float precio = 0;
            SqlConnection conexion = DB.Conectar();
            try
            {
                string comando = "SELECT idPractica, nombre, precioLista FROM Practica WHERE (idPractica = @idPractica)";
                SqlCommand sqlcmd = new SqlCommand(comando, conexion);
                sqlcmd.Parameters.Add(new SqlParameter("@idPractica", idPractica));
                SqlDataReader dr = sqlcmd.ExecuteReader();
                if (dr.HasRows)
                {
                    precio = float.Parse(dr["precioLista"].ToString());
                }
            }
            catch (Exception ex)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return precio;
        }

        public static float ObtenerPrecioMedicoPractica(int idPractica)
        {
            float precio = 0;
            SqlConnection conexion = DB.Conectar();
            try
            {
                string comando = "SELECT idPractica, nombre, precioMedico FROM Practica WHERE (idPractica = @idPractica)";
                SqlCommand sqlcmd = new SqlCommand(comando, conexion);
                sqlcmd.Parameters.Add(new SqlParameter("@idPractica", idPractica));
                SqlDataReader dr = sqlcmd.ExecuteReader();
                if (dr.HasRows)
                {
                    precio = float.Parse(dr["precioMedico"].ToString());
                }
            }
            catch (Exception ex)
            {

                throw;
            }
            finally
            {
                conexion.Close();
            }
            return precio;
        }

    }


}

